package com.legendshop.openportal.sdk.model.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author jzh
 * @version 1.0.0
 * @title CommonStatusEnum
 * @date 2024/6/17 18:36
 * @description：通用状态码
 */
@Getter
@AllArgsConstructor
public enum CommonStatusEnum {

    // ------------ 0xxx 成功状态码

    /**
     * 操作成功
     */
    SUCCESS("0000", "操作成功"),

    /**
     * 重复提交
     */
    DUPLICATE_SUBMISSIONS("0008", "重复提交"),

    // ------------ 1xxx 参数问题

    /**
     * 参数为空
     */
    PARAMETER_IS_EMPTY("1001", "参数为空"),

    /**
     * 参数格式不正确
     */
    PARAMETER_FORMATTED_MISTAKE("1002", "参数格式不正确"),

    /**
     * 参数值不正确
     */
    PARAMETER_VALUE_MISTAKE("1003", "参数值不正确"),

    /**
     * 参数重复
     */
    PARAMETER_REPEATED("1004", "参数重复"),

    /**
     * 入参转化错误
     */
    INPUT_PARAMETER_CONVERSION_ERROR("1005", "入参转化错误"),

    /**
     * 入参超出限制
     */
    INPUT_PARAMETER_LIMIT("1006","入参超出限制"),


    // ------------ 2xxx 权限问题 通用，请联系业务人员咨询对应权限问题

    /**
     * 无效token
     */
    INVALID_TOKEN("2000", "无效token"),

    /**
     * 用户权限不足
     */
    INVALID_SCOPE("2001", "用户权限不足"),

    /**
     * 接口权限不足
     */
    INVALID_REQUEST("2002", "接口权限不足"),

    /**
     * 客户端权限不足
     */
    INVALID_CLIENT("2003", "客户端权限不足"),

    /**
     * 商品池权限不足
     */
    INVALID_PRODUCTS_POOL("2004", "商品池权限不足"),

    /**
     * token已过期
     * 请重新刷新或者获取token
     */
    TOKEN_EXPIRED("2007", "token已过期"),

    /**
     * 认证失败，请重新登录
     */
    AUTHENTICATION_FAILED("2012", "认证失败，请重新登录"),


    // ------------ 3xxx 业务问题
    // ------------ 30xx 下单业务问题

    /**
     * 价格不存在
     */
    PRICE_DOES_NOT_EXIST("3001", "价格不存在"),

    /**
     * 提交订单过快
     */
    SUBMIT_ORDER_TOO_QUICKLY("3002", "提交订单过快"),

    /**
     * 订单类型不支持
     */
    ORDER_TYPES_ARE_NOT_SUPPORTED("3003", "订单类型不支持"),

    /**
     * 商品类型受限制
     */
    PRODUCT_TYPES_RESTRICTED("3004", "商品类型受限制"),

    /**
     * 商品不存在
     */
    PRODUCT_NOT_FOUND("3005", "商品不存在"),
    /**
     * SKU不存在
     */
    SKU_NOT_FOUND("3006", "商品SKU不存在"),

    /**
     * 产品SKU信息不匹配
     */
    PROD_SKU_NOT_MATCH("3007","产品SKU信息不匹配"),

    /**
     * 库存不足
     */
    INSUFFICIENT_INVENTORY("3008", "库存不足"),

    /**
     * 商品在该区域受限
     */
    REGION_RESTRICTION_VERIFICATION_FAILED("3009", "商品在该区域受限"),

    /**
     * 余额不足
     */
    BALANCE_INSUFFICIENT("3017", "余额不足"),

    /**
     * 商品价格不一致
     */
    PRICE_NOT_MATCH("3019", "商品价格不一致"),

    /**
     * 找不到数据
     */
    NO_DATA("3020", "数据不存在"),

    // ------------ 3051开始的为下游接口异常  接口调用失败，可重试

    /**
     * 价格获取失败
     */
    PRICE_FETCH_FAILED("3051", "价格获取失败"),

    /**
     * 下单失败，请重新提交订单
     * 接口调用失败，可重试（下游下单接口返回，不确定重试能否成功）
     */
    ORDER_CALL_FAILED("3058", "下单失败，请重新提交订单"),


    // ------------ 31xx 确认订单业务问题

    /**
     * 确认下单最终失败，请重新确认订单
     * 可重新确认
     */
    CONFIRM_ORDER_FAILED("3101", "确认下单最终失败，请重新确认订单"),

    /**
     * 订单不存在
     */
    CONFIRM_ORDER_DOES_NOT_EXIST("3102", "订单不存在"),

    /**
     * 订单不存在
     */
    CONFIRM_ORDER_ITEM_DOES_NOT_EXIST("3302", "订单项不存在"),

    /**
     * 该订单已确认下单
     * 已确认订单，不需要重复确认
     */
    ORDER_HAS_BEEN_CONFIRMED("3103", "该订单已确认下单"),

    /**
     * 不能单独确认子订单
     */
    DO_NOT_POSSIBLE_TO_CONFIRM_SUB_ORDERS_INDIVIDUALLY("3104", "不能单独确认子订单"),

    /**
     * 订单对应子单已取消，不能确认
     */
    ORDER_HAS_BEEN_CANCELLED_AND_CANNOT_BE_CONFIRMED("3105", "订单已取消，不能确认"),

    /**
     * 查询子单异常
     */
    QUERY_SUBORDER_IS_ABNORMAL("3106", "查询子单异常"),

    /**
     * 确认订单操作失败
     */
    CONFIRMATION_ORDER_OPERATION_FAILED("3108", "确认订单操作失败"),

    /**
     * 订单尚未支付
     */
    ORDER_NOT_PAYED("3109", "订单尚未支付"),

    // ------------ 32xx 取消订单业务问题

    /**
     * 取消订单失败，请重新取消订单
     */
    FAILED_TO_CANCEL_THE_ORDER("3201", "取消订单失败，请重新取消订单"),

    /**
     * 订单不存在
     */
    CANCEL_ORDER_DOES_NOT_EXIST("3202", "订单不存在"),

    /**
     * 该订单已经被取消
     */
    ORDER_HAS_BEEN_CANCELLED("3203", "该订单已经被取消"),

    /**
     * 不能取消已经生产订单
     */
    CANNOT_CANCEL_ALREADY_MANUFACTURED_ORDER("3204", "不能取消已经生产订单"),

    /**
     * 不能取消父订单
     */
    CANNOT_CANCEL_PARENT_ORDER("3207", "不能取消父订单"),


    /**
     * 不能取消子订单
     */
    CANNOT_CANCEL_SUB_ORDER("3209", "不能取消子订单"),

    /**
     * 取消订单操作失败
     */
    CANCEL_ORDER_OPERATION_FAILED("3212", "取消订单操作失败"),


    // ------------ 33xx 发票业务问题




    // ------------ 34xx 其余接口问题

    /**
     * 订单不存在
     */
    ORDER_DOES_NOT_EXIST("3401", "订单不存在"),

    /**
     * 订单配送信息不存在
     */
    ORDER_DELIVERY_INFORMATION_DOES_NOT_EXIST("3402", "订单配送信息不存在"),

    /**
     * 不能售后父订单
     */
    CANNOT_AFTER_SALE_PARENT_ORDER("3403", "父订单不支持售后"),


    /**
     * 申请售后异常
     */
    AFTER_SALE_ERROR("3404", "申请售后异常"),


    // ------------ 35xx 地址接口合法性问题
    LOCATION_INVALID("3501","地址不合法"),






    //------------- 4xxx


    // ------------ 5xxx 系统异常问题

    /**
     * 服务异常，请稍后重试
     */
    ERROR("5000", "服务异常，请稍后重试"),

    /**
     * 未知状态
     */
    UNKNOWN_STATUS("5001", "未知状态"),

    /**
     * 未知异常
     */
    UNKNOWN_ERROR("5002", "未知异常"),

    /**
     * 无法解析响应内容
     * 会把响应内容返回上去
     */
    UNABLE_ANALYZER("5003", "无法解析响应内容");

    private final String status;

    private final String message;

    public static CommonStatusEnum fromCode(String status) {
        for (CommonStatusEnum e : values()) {
            if (e.status.equals(status)) {
                return e;
            }
        }
        return UNKNOWN_STATUS;
    }

}
